package chapter07.observer;
import java.util.*;
public class RMBrateTest {
	public static void main(String[] args) {
		Rate rate = new RMBrate();          
		Company watcher1 = new ImportCompany();  
		Company watcher2 = new ExportCompany();            
		rate.add(watcher1);  
		rate.add(watcher2);            
		rate.change(10);
		rate.change(-9);
	}
}
//抽象目标：汇率
abstract class Rate
{
	protected List<Company> companys = new ArrayList<Company>();	
	//增加观察者方法
	public void add(Company company)
	{
		companys.add(company);
	} 	
	//删除观察者方法
	public void remove(Company company)
	{
		companys.remove(company);
	}	
	public abstract void change(int number);
}
//具体目标：人民币汇率
class RMBrate extends Rate  
{ 
    public void change(int number)
	{		
		for(Company obs:companys)
		{
			((Company)obs).response(number);
		}		
	}

}
//抽象观察者：公司
interface Company
{
	void response(int number); 
} 
//具体观察者1：进口公司  
class ImportCompany implements Company  
{
	public void response(int number)  
    {
		if(number > 0){
			System.out.println("人民币汇率升值"+number+"个基点，降低了进口产品成本，提升了进口公司利润率。 " );  
        }else if(number < 0){
      	    System.out.println("人民币汇率贬值"+(-number)+"个基点，提升了进口产品成本，降低了进口公司利润率。 " );  
        }
    }  
}  
//具体观察者2：出口公司
class ExportCompany implements Company  
{
	public void response(int number)  
    {
		if(number > 0){
			System.out.println("人民币汇率升值"+number+"个基点，降低了出口产品收入，降低了出口公司的销售利润率。 " );  
        }else if(number < 0){
      	    System.out.println("人民币汇率贬值"+(-number)+"个基点，提升了出口产品收入，提升了出口公司的销售利润率。 " );  
        }
    }  
} 